package com.yfp.operation.service;

import com.yfp.common.core.web.page.TableDataInfo;
import com.yfp.operation.domain.OrderListDO;
import com.yfp.operation.domain.dto.*;
import com.yfp.operation.domain.vo.*;
import com.yfp.operation.domain.dto.*;
import com.yfp.operation.domain.vo.*;

import java.math.BigDecimal;
import java.util.List;

public interface StatisticsAdminService {

    /**
     * 券包销售数据
     *
     * @param packStatisticsReq
     * @return
     */
    TableDataInfo<PackageSalesDataVO> getPackageSalesDataList(PackageSalesDataDTO packStatisticsReq);

    List<PackageSalesDataVO> getPackageSalesDataListExport(PackageSalesDataDTO packStatisticsReq);

    /**
     * 券包销售数据-单个券包列表
     *
     * @param packStatisticsReq
     * @return
     */
    TableDataInfo<PackageSalesDataForSinglePackageVO> getPackageSalesDataForSinglePackage(PackageSalesDataForSinglePackageDTO packStatisticsReq);

    PackageSalesDataForSinglePackageTotalVO getPackageSalesDataForSinglePackageTotalVO(PackageSalesDataForSinglePackageDTO packStatisticsReq);
    /**
     * 用户分层数据-数据总览
     *
     * @param userLayerDTO
     * @return
     */
    UserLayerOverviewVO getUserLayerOverview(UserLayerDTO userLayerDTO);

    /**
     * 用户分层数据列表
     *
     * @param userLayerDTO
     * @return
     */
    TableDataInfo<UserLayerVO> getUserLayerList(UserLayerDTO userLayerDTO);

    List<UserLayerVO> getUserLayerListExport(UserLayerDTO userLayerDTO);

    /**
     * 新用户数
     *
     * @param userLayerDTO
     * @return
     */
    Integer countUserLayerOverviewNewUser(UserLayerDTO userLayerDTO);

    List<OrderListDO> listUserLayerOverviewNewUser(UserLayerTotalUserDTO userLayerDTO);

    BigDecimal getUserLayerNewUserSequentialGrowth(Integer newUser, UserLayerDTO userLayerDTO);

    BigDecimal getUserLayerRepurchaseRate(Integer totalUser, UserLayerDTO userLayerDTO);

    TableDataInfo<UserLayerTotalUserVO> getUserLayerTotalUserList(UserLayerTotalUserDTO userLayerDTO);

    List<UserLayerTotalUserVO> getUserLayerTotalUserListExport(UserLayerTotalUserDTO userLayerDTO);

    TableDataInfo<UserLayerTotalUserVO> getUserLayerOrderUserList(UserLayerTotalUserDTO userLayerDTO);

    List<UserLayerTotalUserVO> getUserLayerOrderUserListExport(UserLayerTotalUserDTO userLayerDTO);

    TableDataInfo<UserLayerTotalUserVO> getUserLayerNewUserList(UserLayerTotalUserDTO userLayerDTO);

    List<UserLayerTotalUserVO> getUserLayerNewUserListExport(UserLayerTotalUserDTO userLayerDTO);

    TableDataInfo<ComboSalesVO> getComboSalesList(ComboSalesDTO comboSalesDTO);

    List<ComboSalesVO> getComboSalesListExport(ComboSalesDTO comboSalesDTO);

    TableDataInfo<ComboSalesPositionVO> getComboSalesPositionList(ComboSalesPositionDTO comboSalesDTO);

    TableDataInfo<UserLayerMachineVO> getUserLayerMachineList(UserLayerDTO userLayerDTO);
}
